//==========================================================================
// Copyright (c) 2000-2008,  Elastos, Inc.  All Rights Reserved.
//==========================================================================
/*
 * Copyright 1990, 1991 by Thomas Roell, Dinkelscherben, Germany
 * Copyright 1993 by David Wexelblat <dwex@goblin.org>
 * Copyright 1993 by Kevin Martin <martin@cs.unc.edu>
 * Copyright 1993 by Rickard Faith <faith@cs.unc.edu>
 * Copyright 1993 by Scott Laird <lair@midway.uchicago.edu>
 * Copyright 1993 by Tiago Gons <tiago@comosjn.hobby.nl>
 * Copyright 1993 by Jon Tombs <jon@robots.ox.ac.uk>
 *
 * Permission to use, copy, modify, distribute, and sell this software and its
 * documentation for any purpose is hereby granted without fee, provided that
 * the above copyright notice appear in all copies and that both that
 * copyright notice and this permission notice appear in supporting
 * documentation, and that the names of the above listed copyright holders
 * not be used in advertising or publicity pertaining to distribution of
 * the software without specific, written prior permission.  The above listed
 * copyright holders make no representations about the suitability of this
 * software for any purpose.  It is provided "as is" without express or
 * implied warranty.
 *
 * THE ABOVE LISTED COPYRIGHT HOLDERS DISCLAIM ALL WARRANTIES WITH REGARD
 * TO THIS SOFTWARE, INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY
 * AND FITNESS, IN NO EVENT SHALL THE ABOVE LISTED COPYRIGHT HOLDERS BE
 * LIABLE FOR ANY SPECIAL, INDIRECT OR CONSEQUENTIAL DAMAGES OR ANY
 * DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER
 * IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING
 * OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
 *
 */

#ifndef _XF86_HWLIB_H
#define _XF86_HWLIB_H

/***************************************************************************/
/* Macro definitions                                                       */
/***************************************************************************/

/*
 * These are used to tell the clock select functions to save/restore
 * registers they use.
 */
#define CLK_REG_SAVE    -1
#define CLK_REG_RESTORE    -2

/***************************************************************************/
/* Prototypes                                                              */
/***************************************************************************/

#include <Xfuncproto.h>

_XFUNCPROTOBEGIN

/* ICD2061Aalt.c */
extern void AltICD2061SetClock(
    long,
    int
);

extern void Et4000AltICD2061SetClock(
       long,
       int
);

/* ICD2061Acal.c */
extern long ICD2061ACalcClock(
    long,
    int
);

/* ICD2061Aset.c */
extern void ICD2061ASetClock(
    long
);

/*  SC11412.c */
extern Boolean SC11412SetClock(
     long
);

/*  ICS1562.c */
extern void ICS1562_CalcClockBits(
    long f, unsigned char *bits
);

/*  ICS2595.c */
extern Boolean ICS2595SetClock(
     long
);


/* xf86_ClkPr.c */
extern void xf86GetClocks(
    int,
    Boolean (*)(int),
    void (*)(Boolean),
    SaveScreenProcPtr(ScreenPtr pScreen, Boolean on),
    int,
    int,
    int,
    int,
    ScrnInfoRec *
);

/* ATTDac.c */
extern void xf86dactopel(
    void
);

extern unsigned char xf86dactocomm(
    void
);

extern unsigned char xf86getdaccomm(
    void
);

extern void xf86setdaccomm(
    unsigned char
);

extern void xf86setdaccommbit(
    unsigned char
);

extern void xf86clrdaccommbit(
    unsigned char
);

/* S3gendac.c */
extern int S3gendacSetClock(
    long,
    int
);

extern int ET4000gendacSetClock(
        long,
        int
);

extern int ET4000stg1703SetClock(
        long,
        int
);


extern int ET4000gendacSetpixmuxClock(
        long,
        int
);


extern int ET6000SetClock(
        long,
        int
);

extern int ARK2000gendacSetClock(
    long,
    int
);

extern int ICS5342SetClock(
    long,
    int
);

extern int S3TrioSetClock(
    long,
    int
);

extern int S3Trio64V2SetClock(
    long,
    int
);

extern int S3ViRGE_VXSetClock(
    long,
    int
);

extern int S3AuroraSetClock(
    long,
    int
);

/*
 * Gendac clock calculator: needed for those that want to get
 * clock params without actually programming them (e.g. W32 driver)
 */
extern int commonCalcClock(
    long,
    int, int, int, int, int,
    long, long,
    unsigned char *,
    unsigned char *
);

extern int gendacMNToClock(
    unsigned char,
    unsigned char
);

/* Ti3025clk.c */
extern void Ti3025SetClock(
    long,
    int,
    void (*)()
);

/* Ti3026clk.c */
extern void Ti3026SetClock(
    long,
    int,
    int,
    char
);
extern void Ti3030SetClock(
    long,
    int,
    int,
    char
);

/* Ch8391clk.c */
extern void Chrontel8391SetClock(
    long,
    int
);

/* STG1703clk.c */
extern void STG1703SetClock(
    long,
    int
);

/* BUSmemcpy.s */
extern void BusToMem(
    void *,
    void *,
    int
);

extern void MemToBus(
    void *,
    void *,
    int
);

/* SlowBcopy.s */
extern void SlowBcopy(
    char *,
    char *,
    int
);

/* IODelay.s */
extern void GlennsIODelay(
   void
);

/* IBMRGB.c */
extern void IBMRGBSetClock(
    long,
    int,
    long,
    long
);

/* ATTDac.c */
extern void Att409SetClock(
    long,
    int
);
extern unsigned char s3InIBMRGBIndReg(
    unsigned char
);
extern void s3OutIBMRGBIndReg(
    unsigned char,
    unsigned char,
    unsigned char
);
extern int  s3IBMRGB_Probe(
    void
);
extern void s3IBMRGB_Init(
    void
);


_XFUNCPROTOEND
#endif /* _XF86_HWLIB_H */
